// 通过 JSON 格式的字符串创建数组
let x = [];

const N = 10; // 定义一个表示随机数个数的常量

// 随机生成 N 个[0,100)之间的整数
for (let i = 0; i < N; i++) {
    let r = Math.random(); // 随机产生 [ 0 , 1 ) 之间的浮点数
    let f = r * 100;
    let p = f | 0; // Math.floor( f );
    // 将得到的随机数放入到数组末尾
    x.push(p);
}

console.log('length: ', x.length);
console.log('排序前: ', x.toString());

console.log('- - - - - - - - - - - - - - - - - - - - - - - - - - -');

/*
for( let i = 0 ; i < x.length - 1 ; i++ ){
    console.log( '内层for之前: ' , x.toString() );
    for( let p = 0 ; p < x.length - 1 - i ; p++ ){
        if( x[p] > x[p+1] ) {
            // 若数组中都是整数则可以使用 位运算符( ^ )
            x[p] ^= x[p+1];
            x[p+1] ^= x[p];
            x[p] ^= x[p+1];
        }
    }
    console.log( '内层for之后: ' , x.toString() );
}
*/

for (let i = 0; i < x.length - 1; i++) {
    // 为什么这里要 额外减去 i ？ ( x.length - 1 - i )
    for (let p = 0; p < x.length - 1 - i; p++) {
        // 字符串模板 `${变量名}` 可以引用在当前作用域中可以使用的变量
        console.log(`第${p}次交换前`, x.toString());
        if (x[p] > x[p + 1]) {
            let temp = x[p]; // 先将索引p处的值暂存到temp变量中
            x[p] = x[p + 1]; // 将索引p之后的值放入到索引p处
            x[p + 1] = temp; // 将变量temp的值放入到索引p+1处
        }
        console.log(`第${p}次交换后`, x.toString());
    }
    console.log('- - - - - - - - - - - - - - - - - - - - - - -');
}

console.log('排序后: ', x.toString());